package com.wjp.banquet.common.util;


import java.math.BigDecimal;

/**
 * @Author 王君平
 * @Description
 * @Date 2023/9/3 14:38
 */
public class NumberUtil {

    /**
     * 返回数字字符串 主要目的是为了去除空  null  等情况
     * @param str   数值字符串
     * @return
     */
    public static String getValue(String str){
        return StringUtil.isEmpty(str) ? "0" : str;
    }

    /**
     * 返回格式化的数字字符串
     * @param str   数值字符串
     * @param scale  四舍五入要保留的位数
     * @return
     */
    public static String getFormatValue(String str,int scale){
        String str_ = str;
        if(StringUtil.isEmpty(str)){
            str_ = repeatZero(scale);
        }
        BigDecimal b = new BigDecimal(str_);
        return b.setScale(scale,BigDecimal.ROUND_HALF_UP).toPlainString();
    }

    /**
     * 返回格式化的数字字符串
     * @param value   数值字符串
     * @param scale  四舍五入要保留的位数
     * @return
     */
    public static String getFormatValue(BigDecimal value,int scale){
        if(value.setScale(scale,BigDecimal.ROUND_HALF_UP).equals(new BigDecimal("0"))){
            return repeatZero(scale);
        }
        return value.setScale(scale,BigDecimal.ROUND_HALF_UP).toPlainString();
    }

    /**
     *
     * @param value1  除数
     * @param value2  被除数
     * @return   指定精度的百分数字符串
     */
    public static  String getRatio(String value1,String value2,int scale){
        if(StringUtil.isEmpty(value1)){
            return repeatZero(scale);
        }
        if(StringUtil.isEmpty(value2)){
            return repeatZero(scale);
        }
        if(new BigDecimal(value1).setScale(scale,BigDecimal.ROUND_HALF_UP).equals(new BigDecimal("0"))
                || new BigDecimal(value2).setScale(scale,BigDecimal.ROUND_HALF_UP).equals(new BigDecimal("0"))){
            return repeatZero(scale);
        }
        //计算比率
        return new BigDecimal(value1).multiply(new BigDecimal("100"))
                .divide(new BigDecimal(value2),2 + scale, BigDecimal.ROUND_HALF_UP)
                .setScale(scale,BigDecimal.ROUND_HALF_UP).toPlainString();
    }

    /**
     *
     * @param value1  除数
     * @param value2  被除数
     * @return   指定精度的百分数字符串
     */
    public static  String getRatio(BigDecimal value1,BigDecimal value2,int scale){
        if(value1 == null){
            return repeatZero(scale);
        }
        if(value2 == null){
            return repeatZero(scale);
        }
        if(value1.setScale(scale,BigDecimal.ROUND_HALF_UP).equals(new BigDecimal("0"))
                || value2.setScale(scale,BigDecimal.ROUND_HALF_UP).equals(new BigDecimal("0"))){
            return repeatZero(scale);
        }
        //计算比率
        return value1.multiply(new BigDecimal("100"))
                .divide(value2,2 + scale, BigDecimal.ROUND_HALF_UP)
                .setScale(scale,BigDecimal.ROUND_HALF_UP).toPlainString();
    }

    private static String repeatZero(int count){
        if(count <= 0){
            return "0";
        }
        return "0." + repeat("0",count);
    }

    private static String repeat(String str,int count){
        if(count <= 0 || StringUtil.isEmpty(str)){
            return str;
        }
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < count; i++){
            sb.append(str);
        }
        return sb.toString();
    }

}
